import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase tiene los metodos necesarios para hacer que el exterminador se mueva, cheque si toco un zombie o una arma.
 * 
 * @author Héctor Nicolás Anguiano Huerta
 * @version 18 de Noviembre de 2012.
 */
public class Exterminador extends Actor
{
    private Exterminador ext; //Variable que hace referencia al objeto del exterminador.
    private int dir=0;//Variable que contiene la dirección de la bala.
    private int vidas=10;//Variable que contiene el numero de vidas del exterminador.
    private int puntos=10;//Variable que contiene el numero de puntos del exterminador.
    private int cont=0;//Variable que sirve para que las balas aparezcan en el mundo.
    /**
     * Metodo que indica como será el comportamiento de este objeto.
     */
    public void act() 
    {
        // Add your action code here.
        mueveExter();
        dispara();
        checaZombies();
        checaArmas();
        checaVidas();
        cont+=2;
    }    
    
    /**
     * Revisa cual tecla fue la que se presiono para hacer que el exterminador se mueva
     */
    public void mueveExter()
    {
        if(Greenfoot.isKeyDown("left"))
        {
            setLocation(getX()-2,getY());
            setImage("Exterminador2.png");
            dir=1;
        }
        if(Greenfoot.isKeyDown("right"))
        {
            setLocation(getX()+2,getY());
            setImage("Exterminador1.png");
            dir=0;
        }
        if(Greenfoot.isKeyDown("up"))
        {
            setLocation(getX(),getY()-1);
        }
        if(Greenfoot.isKeyDown("down"))
        {
            setLocation(getX(),getY()+1);
        }
    }
    
    /**
     * Metodo que checa si se presiono la tecla "space" para mostar la bala en el mundo.
     */
    public void dispara()
    {
        if(Greenfoot.isKeyDown("space"))
        {
            if(dir==1)
            {
                if(cont%10==0)
                {
                    Zombieland mundo=(Zombieland)getWorld();
                    super.getWorld().addObject(new Bala(dir),getX()-62,getY()+8);
                }
            }
            else
            {
                if(cont%10==0)
                {
                    Zombieland mundo=(Zombieland)getWorld();
                    super.getWorld().addObject(new Bala(dir),getX()+62,getY()+8);
                }
            }
        }
    }

    /**
     * Metodo que aumenta la variable de las vidas.
     */
    public void aumentaVida()
    {
        vidas+=5;
    }
    
    /**
     * Metodo que disminuye la variable de las vidas.
     */
    public void disminuyeVida()
    {
        vidas--;
    }
    
    /**
     * Regresa el valor de las vidas.
     */
    public int regresaVidas()
    {
       return vidas;
    }
    
    /**
     * Actualiza con parametro la cantidad de vida restante
     * @param v Numero de vidas que se quiere asignar
     */
    public void actualizaVidas(int v)
    {
       vidas = v;    
    }
    
    /**
     * Metodo que aumenta la variable de las vidas.
     */
    public void aumentaPunto()
    {
        puntos++;
    }
    
    /**
     * Metodo que disminuye la variable de los puntos.
     */
    public void disminuyePunto()
    {
        puntos-=5;
    }
    
    /**
     * Regresa el valor de los puntos.
     */
    public int regresaPuntos()
    {
       return puntos;
    }
    
    /**
     * Actualiza con parametro la cantidad de puntos restante
     * @param p Numero de puntos que se quiere asignar
     */
    public void actualizaPuntos(int p)
    {
       puntos = p;    
    }
    
    /**
     * Metodo que checa cuando un zombie toca al exterminador.
     */
    public void checaZombies()
    {
        Actor jackson, nerd, music, nator, thor, vader;
        jackson=super.getOneObjectAtOffset(0,0,ZombieJackson.class);
        nerd=super.getOneObjectAtOffset(0,0,ZombieNerd.class);
        music=super.getOneObjectAtOffset(0,0,ZombieMusic.class);
        nator=super.getOneObjectAtOffset(0,0,Zombienator.class);
        thor=super.getOneObjectAtOffset(0,0,ZombieThor.class);
        vader=super.getOneObjectAtOffset(0,0,ZombieVader.class);
        Zombieland mundo=(Zombieland)super.getWorld();
        if(jackson!=null || nerd!=null || music!=null || nator!=null || thor!=null || vader!=null)
        {
            mundo.restaVida();
            setLocation(585,460);
        }
    }
    
    /**
     * Metodo que checa cuando una arma de cualquier zombie toca al exterminador.
     */
    public void checaArmas()
    {
        Actor disco,libro,cerebro,guitarra,rayo,bola;
        disco=super.getOneObjectAtOffset(0,0,Disco.class);
        libro=super.getOneObjectAtOffset(0,0,Libro.class);
        cerebro=super.getOneObjectAtOffset(0,0,Cerebro.class);
        guitarra=super.getOneObjectAtOffset(0,0,Guitarra.class);
        rayo=super.getOneObjectAtOffset(0,0,Rayo.class);
        bola=super.getOneObjectAtOffset(0,0,BolaFuego.class);
        Zombieland mundo=(Zombieland)super.getWorld();
        if(disco!=null || libro!=null || guitarra!=null || cerebro!=null || rayo!=null || bola!=null)
        {
            mundo.restaVida();
            setLocation(585,460);
        }
    }
    
    /**
     * Checa si sus vidas llegaron a cero
     */
    public void checaVidas()
    {
        Actor meta=super.getOneObjectAtOffset(0,0,Meta.class);
        Zombieland mundo=(Zombieland)super.getWorld();
        Letrero msj;
        Contador cont;
        if(vidas<1)
        {
            msj=new Letrero("Game Over...");
            mundo.addObject(msj,600,300);
            Greenfoot.delay(30);
            Greenfoot.stop();
        }
    }
}